home *** CD-ROM | disk | FTP | other *** search
/ AMIGA-CD 2 / Amiga-CD - Volume 2.iso / ungepackte_daten / 1994 / 6 / 01 / mini-compiler / mini.ampk / Mini-Compiler / asm / Str2Int.Lib < prev    next >
Encoding:
Text File  |  1995-06-01  |  1.8 KB  |  67 lines

  1.        Idnt    _Val
  2.        Section _Str2Int,Code
  3.        Xdef    Str2Int
  4.  
  5.     ; String nach Integer
  6.     ; Stand 10-Jun-93
  7.     ;        angepaßt an MINI-Comp
  8.     ;       12-Jun-93
  9.     ;        Fehler in der Adressbrechnung,A5 Benutzung entfernt
  10.     ; RTS.l String
  11.  
  12.  
  13. Str2Int:MOVEA.L (A7)+,A3                ; Rts
  14.         Moveq   #0,d2
  15.         move.b  (a7),d2            ; Länge des Strings
  16.         Moveq   #0,D6            ; Vorzeichen (0=+,-1=-)
  17.         Moveq   #0,D1
  18.         MOVEA.L A7,A4            ; Zeiger auf akt. Zeichen
  19.     Move.l    a7,a6        
  20.     adda.l  #256,a6            ; = Bereinigter Stack
  21.     Addq.l  #1,a4            ; Längenbyte ignorieren
  22. S2Iloop:BSR.S   Gnc            ; Zeichen holen
  23.         CMP.B   #$20,D0            ; Space(s) am Anfang ignorieren
  24.         BEQ.S   S2Iloop
  25.         CMP.B   #$2B,D0            ; '+' ?
  26.         BNE.S   S2Iw1            ; Nein 
  27.         BSR.S   Gnc            ; Nächstes Zeichen
  28.         BRA.S   S2Iw2
  29. S2Iw1:  CMP.B   #$2D,D0            ; '-' 
  30.         BNE.S   S2Iw2
  31.         MOVEQ   #-1,D6            ; Negativer Wert
  32.         BSR.S   Gnc
  33. S2Iw2:  CMP.B   #$30,D0            ; Zeichen <'0'
  34.         BMI.S   S2Iexit            ; Ja -> Abbruch
  35.         CMP.B   #$3A,D0            ; Zeichen >'9'
  36.         BPL.S   S2Iexit            ; Ja -> Abbruch
  37.         ASL.L   #1,D1            ; Mal 10
  38.         MOVE.L  D1,D5
  39.         ASL.L   #2,D1
  40.         ADD.L   D5,D1
  41.         ADD.L   D0,D1            ; Dazu neuen Wert
  42.         SUB.L   #$30,D1            ; Minus Wert Zeichen '0'
  43.         BSR.S   Gnc
  44.         BRA.S   S2Iw2
  45. S2Iexit:Move.l  a6,a7            ; Weg mit String
  46.         TST.B   D6            ; Negativer Wert ?
  47.         BEQ.S   S2Iweit
  48.         NEG.L   D1            ; ja, negieren
  49. S2Iweit:MOVE.L  D1,-(A7)
  50.         Jmp    (a3)
  51. Gnc:    CLR.L   D0
  52.         MOVE.B  (A4)+,D0
  53.         CMP.B   #$20,D0
  54.         BEQ.S   S2Irts
  55.         CMP.B   #$2B,D0
  56.  BEQ.S S2Irts
  57.  CMP.B #$2D,D0
  58.  BEQ.S S2Irts
  59.  CMP.B #$30,D0
  60.  BMI.S S2Iexit
  61.         CMP.B  #$3A,D0
  62.         BPL.S  S2Iexit
  63. S2Irts: SUBQ.W #1,D2
  64.         BMI.S  S2Iexit
  65.         RTS
  66.  
  67.